﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TangoFamilyAndGuide.RN
{
    public class Sesion
    {
        public static void Cerrar(Entidades.Sesion Sesion)
        {
            Sesion.Usuario = new Entidades.Usuario();
            //Sesion.MilongasDelUsuario = new List<Entidades.Milongas>();
            Sesion.OpcionesHabilitadas = OpcionesHabilitadas(Sesion);
        }
        public static List<string> OpcionesHabilitadas(Entidades.Sesion Sesion)
        {
            List<string> opcionesHabilitadas = new List<string>();
            if (Sesion.Usuario.Id != null)
            {
                //opcionesHabilitadas.Add("Página principal|Página principal");
                //opcionesHabilitadas.Add("Contacto|Contacto");
                List<Entidades.Permiso> permisoOperMilongaActive = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperMilonga" && p.Estado == "Active";
                });
                if (permisoOperMilongaActive.Count != 0)
                {
                    opcionesHabilitadas.Add("Milongas|New");
                    opcionesHabilitadas.Add("Milongas|Change Status");
                    opcionesHabilitadas.Add("Milongas|Modify");
                    opcionesHabilitadas.Add("Milongas|Images");
                    opcionesHabilitadas.Add("Milongas|List");
                }
                List<Entidades.Permiso> permisoOperFestivalActive = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperFestival" && p.Estado == "Active";
                });
                if (permisoOperFestivalActive.Count != 0)
                {
                    opcionesHabilitadas.Add("Festivals|New");
                    opcionesHabilitadas.Add("Festivals|Change Status");
                    opcionesHabilitadas.Add("Festivals|Modify");
                    opcionesHabilitadas.Add("Festivals|Images");
                    opcionesHabilitadas.Add("Festivals|List");
                }
                List<Entidades.Permiso> permisoOperTeacherActive = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperTeacher" && p.Estado == "Active";
                });
                if (permisoOperTeacherActive.Count != 0)
                {
                    opcionesHabilitadas.Add("Teachers & Taxi Dancers|New");
                    opcionesHabilitadas.Add("Teachers & Taxi Dancers|Change Status");
                    opcionesHabilitadas.Add("Teachers & Taxi Dancers|Modify");
                    opcionesHabilitadas.Add("Teachers & Taxi Dancers|Images");
                    opcionesHabilitadas.Add("Teachers & Taxi Dancers|List");
                }
                List<Entidades.Permiso> permisoOperHost = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperHost" && p.Estado == "Active";
                });
                if (permisoOperHost.Count != 0)
                {
                    opcionesHabilitadas.Add("Rentals by Owners|New");
                    opcionesHabilitadas.Add("Rentals by Owners|Change Status");
                    opcionesHabilitadas.Add("Rentals by Owners|Modify");
                    opcionesHabilitadas.Add("Rentals by Owners|Images");
                    opcionesHabilitadas.Add("Rentals by Owners|List");
                    opcionesHabilitadas.Add("Rentals by Owners|Information");
                    opcionesHabilitadas.Add("Rentals by Owners|Payment");
                }
                List<Entidades.Permiso> permisoOperHousing = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperHousing" && p.Estado == "Active";
                });
                if (permisoOperHousing.Count != 0)
                {
                    opcionesHabilitadas.Add("Milonguero Housing Network|New");
                    opcionesHabilitadas.Add("Milonguero Housing Network|Change Status");
                    opcionesHabilitadas.Add("Milonguero Housing Network|Modify");
                    opcionesHabilitadas.Add("Milonguero Housing Network|Images");
                    opcionesHabilitadas.Add("Milonguero Housing Network|List");
                    opcionesHabilitadas.Add("Milonguero Housing Network|Information");
                    opcionesHabilitadas.Add("Milonguero Housing Network|Payment");
                }
                List<Entidades.Permiso> permisoOperCastingArtistsOffer = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperCastingArtistsOffer" && p.Estado == "Active";
                });
                if (permisoOperCastingArtistsOffer.Count != 0)
                {
                    opcionesHabilitadas.Add("Casting Offers for Artist|New");
                    opcionesHabilitadas.Add("Casting Offers for Artist|Change Status");
                    opcionesHabilitadas.Add("Casting Offers for Artist|Modify");
                    opcionesHabilitadas.Add("Casting Offers for Artist|Images");
                    opcionesHabilitadas.Add("Casting Offers for Artist|List");
                }
                List<Entidades.Permiso> permisoOperCastingCall = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "OperCastingCall" && p.Estado == "Active";
                });
                if (permisoOperCastingCall.Count != 0)
                {
                    opcionesHabilitadas.Add("Job Posting|New");
                    opcionesHabilitadas.Add("Job Posting|Change Status");
                    opcionesHabilitadas.Add("Job Posting|Modify");
                    opcionesHabilitadas.Add("Job Posting|List");
                }
                opcionesHabilitadas.Add("Configuration|Change user password");
                opcionesHabilitadas.Add("Configuration|Modify configuration");
                opcionesHabilitadas.Add("Configuration|Terms and conditions");
                opcionesHabilitadas.Add("Close session");
                List<Entidades.Permiso> permisoAdminSITEActive = Sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                {
                    return p.TipoPermiso.Id == "AdminSITE" && p.Estado == "Active";
                });
                if (permisoAdminSITEActive.Count != 0)
                {
                    opcionesHabilitadas.Add("Administración Site|Explorador de Usuarios");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Permisos");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Milongas");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Festivales");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Profesores");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Alojamientos");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Housing");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Casting Offers for Artist");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Job Posting");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Air Ticket");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Publicidad");
                    opcionesHabilitadas.Add("Administración Site|Explorador de Comentarios");
                    //opcionesHabilitadas.Add("Administración Site|Explorador de Configuraciones");
                    //opcionesHabilitadas.Add("Administración Site|Explorador de Logs");
                }
            }
            else
            {
                opcionesHabilitadas.Add("Login");
            }
            return opcionesHabilitadas;
        }
        public static void AsignarUsuario(Entidades.Usuario Usuario, Entidades.Sesion Sesion)
        {
            Sesion.Usuario = Usuario;
        }
        public static void RefrescarDatosUsuario(Entidades.Usuario Usuario, Entidades.Sesion Sesion)
        {
            Sesion.Usuario.Permisos = RN.Permiso.LeerListaPermisosPorUsuario(Sesion.Usuario, Sesion);
            Sesion.MilongasDelUsuario = RN.Milonga.LeerListaMilongasPorUsuario(Sesion);
            Sesion.OpcionesHabilitadas = OpcionesHabilitadas(Sesion);
        }
    }
}